package main

import "fmt"

var x, y int
var (// 这种因式分解关键字的写法一般用于声明全局变量
	a int
	b bool
)

var c, d int = 1, 2
var e, f = 123, "hello"

//这种不带声明格式的只能在函数体中出现
//g, h := 123, "hello"

func main() {
	// Go语言变量
	/*var a string = "Runoob"
	fmt.Println(a)

	var b, c int = 1, 2
	fmt.Println(b, c)*/

	// 声明一个变量并初始化
	/*var a  = "RUNOOB"
	fmt.Println(a)

	// 没有初始化就为零值
	var b int
	fmt.Println(b)

	// bool零值为false
	var c bool
	fmt.Println(c)*/

	/*
		空指针：var a *int
		空列表：var a []int
		空字典：var a map[string] int
		空队列：var a chan int
		空函数：var a func(string) int
		空接口：var a error//error是接口
	*/

	/*
	var i int
	var f float64
	var b bool
	var s string
	fmt.Printf("%v %v %v %q\n", i, f, b, s)*/

	/*var d = true
	fmt.Println(d)*/

	// 省略var，注意:=左侧如果没有声明新的变量，就产生编译错误，格式：
	/*v_name := 4
	var v_name*/

	/*f := "Runoob" // var f string = "Runoob"
	fmt.Println(f)*/

	/*g, h := 123, "hello"
	fmt.Println(x, y, a, b, c, d, e, f, g, h)*/

	// 声明变量a但没有用它，会编译报错(全局变量除外)
	/*var a string = "abc"
	fmt.Println("hello")*/

	// 交换两个变量的值；
	// a, b = b, a

	fmt.Println()
}
